Computer programmers and computer users always desire to have quick and efficient flexibility, control, and data gathering ability of commercial software, internally or personally developed software packages, and other forms of computer code. To achieve flexibility and control of software, computer programmers and users have proliferated the use of compiler options in computer code for altering a computer program, computer hardware exceptions and break points, and software simulations. All of these techniques are used to give a programmer and/or a user flexibility during program execution, the ability to control program results and flow, and the ability to gain knowledge of the software and the software's execution.
The most primitive way to alter a computer program is to edit the computer program, make all modifications desired by changing instructions in the computer program, compile, link, and execute the code to observe changes. If the changes were not satisfactory, the edit, modify, compile, link, and execute process would have to be performed again. This method has several disadvantages including, being time consuming, not being user-friendly, and not being flexible in any manner.
Compiler options are statements or commands which alter the course of the compilation process such as to determine optimization levels and enable debugging modes or facilities, and/or gather statistical information. By changing, deleting, or adding compiler options, a user or a programmer can alter the performance, execution flow, or results of a computer program. Compiler options are widely used because they are, in most cases, easier to implement than other technologies. Once program execution has been suspended or stopped completely, the user or programmer must edit the computer program, change the compiler options, compile, link, and start the program execution all over again. For programs that require several changes or iterations, when optimizing a program for example, this task of changing compiler options and re-executing is very time consuming, not user friendly, and not very flexible.
Exceptions, or interrupts, and break points are an improvement over other existing technologies due to the fact that exceptions and break points can provide for easier use. Exceptions and break points can be set flexibly and can alter program flow and results without extensive intervention by the user or the programmer. Exceptions and break points allowed users and programmers to benefit from software packages such as program debuggers and the like. Debuggers and other similar software packages usually rely heavily on exceptions and/or break points to function. One disadvantage with exceptions and break points is that they require a large amount of hardware or software overhead in terms of space and time. Due to an exception or break point, memory mapping can change, the computer or microprocessor has to suddenly store or move several pieces of information, sometimes program flow or data computations are lost as a result of an exception or break point, and recovering from an exception back to normal program execution may not be trivial.
To achieve more flexibility and control, simulations of software became widely used. By simulating a device or software package a user or programmer could have full control over all data, execution, and performance evaluation of the software or design under simulation. The biggest disadvantage of simulations is that simulations are extremely slow and time consuming. Some simulations have run times that are one hundred times slower than the amount of time it would take to run the simulated design or program alone without the overhead of the simulation.
All of the above mentioned forms of conventional control of "canned" commercial software and other forms of computer programs have typically: (1) involved time consuming procedures; (2) resulted in a large amount of hardware and/or software overhead; (3) not been dynamic or open-ended functional, especially during program run time; (4) not been user friendly; (5) not been capable of large scale data analysis, or data collection that can interface to other software packages; (6) they produce code that is not optimized or compatible with standard production and/or (7) not been flexible enough for use in a wide range of applications.